/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.jsfgooglemaps.jsfgooglemaps.bean;

/**
 *
 * @author ANDRE
 */
import br.com.jsfgooglemaps.jsfgooglemaps.entity.Aluno;
import br.com.jsfgooglemaps.jsfgooglemaps.entity.Carro;
import br.com.jsfgooglemaps.jsfgooglemaps.entity.Coordenadas;
import br.com.jsfgooglemaps.jsfgooglemaps.entity.Endereco;
import br.com.jsfgooglemaps.jsfgooglemaps.entity.Escola;
import br.com.jsfgooglemaps.jsfgooglemaps.entity.Motorista;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.map.MarkerDragEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

/**
 *
 * @author ANDRE
 */
@ManagedBean(name = "mapBean")
@ViewScoped
public class MapBean implements Serializable {

    private MapModel draggableModel;
    private Marker marker;

    public MapBean() {
        draggableModel = new DefaultMapModel();

        //Shared coordinates
        //Concremat -> -22.902635,-43.219841
        //Minha Casa -> -22.888906,-43.27621  
        //Shopping Tijuca -> -22.921125,-43.23507
        //Maracanã -> -22.912073,-43.226892

        //SET ALUNO
        Endereco enderecoAluno = new Endereco();
        Aluno aluno = new Aluno();
        aluno.setId(Long.MIN_VALUE);
        aluno.setNome("André");
        aluno.setNomeResponsavel("Sandra");
        enderecoAluno.setId(Long.MIN_VALUE);
        Coordenadas coordAluno = new Coordenadas();
        coordAluno.setId(Long.MIN_VALUE);
        coordAluno.setLatitude(-22.902635);
        coordAluno.setLongitude(-43.219841);
        enderecoAluno.setCoordenadas(coordAluno);
        aluno.setEndereco(enderecoAluno);

        //SET MOTORISTA
        Motorista motorista = new Motorista();
        motorista.setId(Long.MIN_VALUE);
        motorista.setNome("Kleber");
        Coordenadas coordMotorista = new Coordenadas();
        coordMotorista.setId(Long.MAX_VALUE);
        coordMotorista.setLatitude(-22.912073);
        coordMotorista.setLongitude(-43.226892);

        motorista.setCoordenadas(coordMotorista);
        //SET CARRO
        Carro carro = new Carro();
        carro.setId(Long.MIN_VALUE);
        carro.setFabricante("VW");
        carro.setMarca("Fox");
        carro.setPlaca("LAX1569");

        //JOIN MOTORISTA_CARRO
        carro.setMotorista(motorista);
        motorista.setCarro(carro);

        //SET ESCOLA
        Escola escola = new Escola();
        escola.setId(Long.MIN_VALUE);
        escola.setNome("Escola Shopping Tijuca");
        Coordenadas coordEscola = new Coordenadas();
        Endereco enderecoEscola = new Endereco();
        enderecoEscola.setId(Long.MIN_VALUE);
        coordEscola.setId(Long.MIN_VALUE);
        coordEscola.setLatitude(-22.921125);
        coordEscola.setLongitude(-43.23507);
        enderecoEscola.setCoordenadas(coordEscola);
        escola.setEndereco(enderecoEscola);


        LatLng coord1 = new LatLng(aluno.getEndereco().getCoordenadas().getLatitude(), aluno.getEndereco().getCoordenadas().getLongitude());
        LatLng coord2 = new LatLng(motorista.getCoordenadas().getLatitude(), motorista.getCoordenadas().getLongitude());
        LatLng coord3 = new LatLng(escola.getEndereco().getCoordenadas().getLatitude(), escola.getEndereco().getCoordenadas().getLongitude());
        //FIXO
        LatLng coord4 = new LatLng(-22.888906, -43.27621);
        //Draggable
        draggableModel.addOverlay(new Marker(coord1, "Aluno: " + aluno.getNome() + " - Responsável: " + aluno.getNomeResponsavel(), "aluno.png", "http://maps.google.com/mapfiles/ms/micons/blue-dot.png"));
        draggableModel.addOverlay(new Marker(coord2, "Motorista: " + motorista.getNome() + " - Carro: " + motorista.getCarro().getMarca(), "motorista.png", "http://maps.google.com/mapfiles/ms/micons/yellow-dot.png"));
        draggableModel.addOverlay(new Marker(coord3, "Escola : " + escola.getNome(), "escola.png", "http://maps.google.com/mapfiles/ms/micons/yellow-dot.png"));
        draggableModel.addOverlay(new Marker(coord4, "Lugar Fixo - Rua Cachambi", "fixo.png", "http://maps.google.com/mapfiles/ms/micons/pink-dot.png"));


        for (Marker marker : draggableModel.getMarkers()) {
            marker.setDraggable(true);
        }
    }

    public MapModel getDraggableModel() {
        return draggableModel;
    }

    public void onMarkerDrag(MarkerDragEvent event) {
        marker = event.getMarker();

        addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Dragged", "Lat:" + marker.getLatlng().getLat() + ", Lng:" + marker.getLatlng().getLng()));
    }

    public void addMessage(FacesMessage message) {
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public Marker getMarker() {
        return marker;
    }
}
